package com.redis.sdk.lock;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * LockRedis
 *
 * @description: redis 分布式锁
 * @author: cyj
 * @date 2021 -12-23 10:41:16
 *
 *
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LockRedis {
    /**
     * 上锁key 支持spel #开头, 会将数组字段串拼接
     *
     * @return the string
     */
    String[] value();

    /**
     * 过期时间，单位s，默认5s
     *
     * @return the string
     */
    long expire() default 5;

    /**
     * 阻塞至获取到锁时间，单位s, 默认不阻塞
     *
     * @return the string
     */
    long tryLockTime() default -1;

    /**
     * 开启看门狗，自动续锁, 过期时间会强制设置成30s, 每 1/3进行一次续锁尝试
     *
     * @return the string
     */
    boolean watchdog() default false;
}
